/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;
import entity.Tema;
import java.util.List;
import utils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Query;
import java.util.Iterator;
public class TemaDAO{
    public static void main(String[]args){
          TemaDAO.getAllTemas();

    }


            public static Tema getTemaByName(int nombreTema){

		Session session=HibernateUtil.getSessionFactory().openSession();
		Tema tema=null;
		try{
                         String consulta="FROM Tema T WHERE T.textoTema LIKE '"+nombreTema+"%'";
                          Query q=(Query) session.createQuery(consulta);
                          List temas=(List)q;
                          Iterator iterador =temas.listIterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella
                            while(iterador.hasNext() ) {
                                     Tema t=(Tema)iterador.next();
                                     System.out.println(t.getTextoTema());
                                     //Obtengo el elemento contenido

                }
                          System.out.println(temas.isEmpty()+"****************** L I S T A ***************");
                          session.close();
	     }catch(org.hibernate.exception.GenericJDBCException excepts){
			   if(session!= null&& session.isOpen())
				session.close();

	     }catch(Exception e){
			if(session!= null&& session.isOpen())
			     session.close();

	     }finally{
		      if(session!= null && session.isOpen())
			   session.close();



	    }
		return tema;
	}
            //Método que busca a un tema por ID

    	public static synchronized Tema getTemaPorID(int idTema){
		Session session = HibernateUtil.getSessionFactory().openSession();
		Tema tema=null;
		try{
			String query =" FROM  Tema where textoTema="+idTema;
			tema=(Tema)session.createQuery(query).uniqueResult();
			session.close();
		}catch(org.hibernate.exception.GenericJDBCException excepts){
			if(session!= null&& session.isOpen())
				session.close();

		}catch(Exception e){
			if(session!= null&& session.isOpen())
				session.close();

		} finally{
			if(session!= null && session.isOpen())
				session.close();

		}
		return tema;
	}




   public static synchronized int GuardaTema(Tema tema) {
        Session session = null;
        org.hibernate.Transaction transaction=null;

        try {

            session = HibernateUtil.getSessionFactory().openSession();
            transaction = session.beginTransaction();
            session.save(tema);
            transaction.commit();
            session.close();

            return tema.getIdTema();
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();
            if (session != null && session.isOpen()) {
                session.close();
            }
            return -1;
        } catch (Exception e) {
            transaction.rollback();
            if (session != null && session.isOpen()) {
                session.close();
            }
            return -1;
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }

    }

   //Método que se encarga de eliminar un tema de  por id del tema.
      public static synchronized void eliminaTema(int idTema) {
        Session session = null;
        org.hibernate.Transaction transaction = null;

        try {
            session = HibernateUtil.getSessionFactory().openSession();
            transaction = session.beginTransaction();
            System.out.println("Iniciando transaction de borrado");

            Tema tema=getTemaPorID(idTema);
            session.delete(tema);
            transaction.commit();

            session.close();
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } catch (Exception e) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }
    }

     //Método que se encarga de consultar una lista de Usuarios.
        public static List<Tema> getAllTemas(){
		Session session = HibernateUtil.getSessionFactory().openSession();
		List <Tema>lista=null;
		try{
			String query ="FROM Tema t";
			lista=session.createQuery(query).list();
                        System.out.println(lista.isEmpty()+""+lista.size());
			session.close();
		}catch(org.hibernate.exception.GenericJDBCException excepts){
			if(session!= null&& session.isOpen())
				session.close();

		}catch(Exception e){
			if(session!= null&& session.isOpen())
				session.close();

		} finally{
			if(session!= null && session.isOpen())
				session.close();

		}

		return lista;
	}
         //Método para modificar un Perfil de usuario por ID
         static synchronized void ModificarTemaByName(Tema tema){

		Session session = null;
		org.hibernate.Transaction transaction=null;

		try{
			 session=HibernateUtil.getSessionFactory().openSession();
			 transaction=session.beginTransaction();
		         Tema tem=(Tema)session.load(Tema.class,new Integer(tema.getIdTema()));

                         Tema unTema=(Tema)session.load(Tema.class,new Integer(tema.getIdTema()));
                         // Cambiamos una propiedad del objeto

                         unTema.setTextoTema(tem.getTextoTema());
                         // Lo modificamos en la base de datos
                         session.update(unTema);
			 transaction.commit();
			 session.close();

		} catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } catch (Exception e) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }


    }




}
